perm filename DLNSTA.MID[D,MRC] blob
sn#538123 filedate 1980-09-30 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 X PDLLEN IIILIN DMLIN DDDLIN ILM EXCT FNCN ALPHBG CHNL COLM HILIN LOLIN
C00005 00003 DEVNAM DEVCHR DEVIOS NINPKT NOUPKT NORPKT NFRERR NCKERR NRCERR NSNERR NRNERR NDOERR NNSERR NRSERR NDLERR NSQERR NRPERR NCRTRN DIDS DODS DPID DIWS DOWS UUOPDB INTPDB DILIST DOLIST DXLIST DIWIN DOWIN DACK DSEQ DNUMP DNUM DREP IO%INT IO%CLS IO%EOF IO%DTM IO%CON IO%CCR IO%RDY IO%IDL IO%DLE IO%EOP IO%R1B IO%ACN IO%ODE IO%LIC
C00009 00004 DELAYP PDL HSTADR LINCNT HDABLK HSIZE SCREEN COLPOS TXTOUT DPHEAD DLNUTB DLNNUM PRJPRG JOBNAM
C00011 00005 GO
C00013 00006 GETSTA HDNODM NXTDDB NOJOB PIDLUP
C00015 00007 NOIWIN NOOWIN
C00017 00008 CLREOF
C00020 00009 NODDDM DOIII DODM DELAY NODLAY DELAY1
C00022 00010 TERPRI DECOUT OCTOUT NUMOUT NUMOU1 NUMOU2 NUMOU3 JOBOUT SIXOUT TXTSTR ...LIT
C00024 ENDMK
C⊗;
;X PDLLEN IIILIN DMLIN DDDLIN ILM EXCT FNCN ALPHBG CHNL COLM HILIN LOLIN
TITLE DLNSTAT
SUBTTL Mark Crispin, SU-AI, September 1980
; This program is a complete crock. Enjoy it.
X=1 ? Y=2 ? Z=3 ? L=4 ? N=5 ? DDB=6 ? I=7 ? J=10 ? P=17
PDLLEN==50. ; stack size
; GETLIN bits
IIILIN==400000,, ; terminal is a III
DMLIN== 040000,, ; terminal is a DM
DDDLIN==020000,, ; terminal is a DD
; APRENB bits
ILM== 020000 ; MPV occured
; Data Risc command word
DEFINE CW ?C1,B1,C2,B2,C3,B3
<<B1←28.>\<B2←20.>\<B3←12.>\<C1←9.>\<C2←6.>\<C3←3>\4>
TERMIN
; Data Risc command names
EXCT== 0 ; execute
FNCN== 1 ; function, usual value bytes
ALPHBG==6 ? ALPHA==46
CHNL== 2 ; channel select
COLM== 3 ; column select
HILIN== 4 ; set high 5 bits of line address
LOLIN== 5 ; set low 4 bits of line address
;DEVNAM DEVCHR DEVIOS NINPKT NOUPKT NORPKT NFRERR NCKERR NRCERR NSNERR NRNERR NDOERR NNSERR NRSERR NDLERR NSQERR NRPERR NCRTRN DIDS DODS DPID DIWS DOWS UUOPDB INTPDB DILIST DOLIST DXLIST DIWIN DOWIN DACK DSEQ DNUMP DNUM DREP IO%INT IO%CLS IO%EOF IO%DTM IO%CON IO%CCR IO%RDY IO%IDL IO%DLE IO%EOP IO%R1B IO%ACN IO%ODE IO%LIC
; DLN DDB stuff
DEVNAM==0 ; device name
DEVCHR==1 ; chars
DEVIOS==2 ; I/O status
NINPKT==11 ; input packets
NOUPKT==NINPKT+1 ; output packets
NORPKT==NOUPKT+1 ; retransmitted packets
NFRERR==NORPKT+1 ; framing errors
NCKERR==NFRERR+1 ; checksum errors
NRCERR==NCKERR+1 ; received errors
NSNERR==NRCERR+1 ; sent errors
NRNERR==NSNERR+1 ; received NAK's
NDOERR==NRNERR+1 ; data overruns
NNSERR==NDOERR+1 ; no free storage at MAKPDB
NRSERR==NNSERR+1 ; no free storage at REPFPL
NDLERR==NRSERR+1 ; dialer bit the bag
NSQERR==NDLERR+1 ; sequence errors
NRPERR==NSQERR+1 ; redundant packets
NCRTRN==NRPERR+1 ; clock-level retransmissions
DIDS==NCRTRN+1 ; I-level input coroutine PC
DODS==DIDS+1 ; I-level output coroutine PC
DPID==DODS+1 ; two words of process ID
DIWS==DPID+2 ; input window
DOWS==DIWS+1 ; output window
UUOPDB==DOWS+1 ; UUO PDB
INTPDB==UUOPDB+1 ; I-level PDB
DILIST==INTPDB+1 ; PDB input list
DOLIST==DILIST+1 ; PDB output list
DXLIST==DOLIST+1 ; PDB pending acknowledgement list
DIWIN==DXLIST+1 ; input window space free
DOWIN==DIWIN+1 ; output window space free
DACK==DOWIN+1 ; last packet received
DSEQ==DACK+1 ; current packet getting sent
DNUMP==DSEQ+1 ; I-level pointer to phone number
DNUM==DNUMP+1 ; phone number
DREP==DNUM+4 ; dialer reply code
; Bits in DEVIOS
IO%INT==100 ; 1.7 → interrupt in input stream
IO%CLS==200 ; 1.8 → connection closing
IO%EOF==400 ; 1.9 → end of file in input stream
IO%DTM==1000 ; 2.1 → data missed due to slow user
IO%CON==200 ; 3.8 → connection open
IO%CCR==400 ; 3.9 → carrier detect on this line
IO%RDY==2000 ; 4.2 → have received a good packet
IO%IDL==4000 ; 4.3 → Output idle
IO%DLE==10000 ; 4.4 → DLE seen at DLIINT
IO%EOP==20000 ; 4.5 → RDPDUN to be run at EOP
IO%R1B==40000 ; 4.6 → read one byte into DDB's DREP
IO%ACN==100000 ; 4.7 → need to send acknowledgement
IO%ODE==200000 ; 4.8 → need to output an additional DLE
IO%LIC==400000 ; 4.9 → locally initiated connect
;DELAYP PDL HSTADR LINCNT HDABLK HSIZE SCREEN COLPOS TXTOUT DPHEAD DLNUTB DLNNUM PRJPRG JOBNAM
; Data area
DELAYP: BLOCK 1 ; -1 → don't delay
PDL: BLOCK PDLLEN ; stack
HSTADR: BLOCK 1 ; where host table begins
LINCNT: BLOCK 1 ; line count
HDABLK: BLOCK 13 ; terminal location block
HSIZE: BLOCK 1 ; horizontal size
SCREEN: BLOCK 1 ; display screen image pointer
; Display program stuff
COLPOS: CW COLM,2,HILIN,1,LOLIN,10 ; second column, second line
TXTOUT: CW FNCN,ALPHA,CHNL,0,FNCN,ALPHA ; text output
DPHEAD: 200000,, ; double field mode
0 ; size
0
0 ; address of low order line select for DD
; Monitor pointers
DLNUTB: (I) ; Dialnet unit/DDB conversion table
DLNNUM: BLOCK 1 ; number of Dialnetses
PRJPRG: (J) ; PPN
JOBNAM: (J) ; program name
; Macro to output performance statistics
DEFINE PERF VAR,STRING/
JSP Y,TXTSTR
ASCIZ/STRING:/
MOVEI I,1
MOVE DDB,@DLNUTB
MOVE Y,VAR+400000(DDB)
MOVEI N,8.
PUSHJ P,DECOUT
CAME I,DLNNUM
AOJA I,.-5
PUSHJ P,TERPRI
TERMIN
;GO
GO: JFCL
RESET
MOVE P,[PDL(-PDLLEN)]
MOVE JOBFF
HRRM DPHEAD
MOVEM DPHEAD+3
AOS DPHEAD+3
ADDI 2
MOVEM SCREEN
; Make sure we never lose with MPV
MOVEI [ MOVE JOBREL
ADDI 2000 ; another K of core, please
CORE
JRST 4,.
LOCK
JRST GETSTA] ; restart status
MOVEM JOBAPR
MOVEI ILM
APRENB
LOCK ; ensure fast response
; Map the monitor in
MOVSI 377777
SETPR2
JRST 4,.-1
; Snarf up some monitor symbols
MOVEI [.RSQZ 0,DLNUTB ? 0]
.SYML
JRST [ OUTSTR [ASCIZ/No Dialnetses!/]
EXIT]
ADDI 377777
HRRM DLNUTB
MOVEI [.RSQZ 0,DLNNUM ? 0]
.SYML
JRST 4,.-1
MOVEM DLNNUM
MOVE 400211 ; PRJPRG
ADDI 400000
HRRM PRJPRG
MOVE 400225 ; JOBNAM
ADDI 400000
HRRM JOBNAM
MOVE X,400226 ; JOB
MOVE X,400000(X)
MOVE L,400236 ; JBTLIN
ADDI L,400000(X)
MOVE L,(L)
CAMN L,[-1]
EXIT ; punt if detached
MOVEI L,400000(L)
ADD L,400302 ; LINTAB
MOVE L,(L)
; Fool around with the page printer
HRROI [015000,,HSIZE]
TTYSET
PPSEL 1
DPYPOS -452 ; near botton of screen
DPYSIZ 3002 ; 3 glitches, 2 lines/glitch
; (continued on next page)
;GETSTA HDNODM NXTDDB NOJOB PIDLUP
GETSTA: SETZB @SCREEN
ADJSP @SCREEN
AOS
BLT @JOBREL
MOVSI X,440700
ADD X,SCREEN
SETZM LINCNT
MOVEI I,1
TLNN (DMLIN)
JRST HDNODM
MOVEI 177
IDPB X
MOVEI ↑W
IDPB X
HDNODM: JSP Y,TXTSTR
ASCIZ/Unit Job User Subsys Proc-ID Status WIO FIO LR LS Phone/
PUSHJ P,TERPRI
NXTDDB: MOVE DDB,@DLNUTB ; DDB addr
ADDI DDB,400000
MOVE Y,DEVNAM(DDB) ; device name
PUSHJ P,SIXOUT
MOVE J,400347 ; PJOBN
TLO J,DDB
LDB J,J
JUMPE J,[ JSP Y,TXTSTR
ASCIZ/ /
JRST NOJOB]
PUSHJ P,JOBOUT
NOJOB: MOVEI <" >
IDPB X
MOVE Y,[441100,,DPID(DDB)] ; connected PID
MOVEI Z,8.
PIDLUP: ILDB Y
SKIPN
MOVEI <" >
IDPB X
SOJG Z,PIDLUP
MOVEI <" >
IDPB X
MOVE J,DEVIOS(DDB)
TRNE J,IO%INT
MOVEI <"I>
IDPB X
MOVEI <" >
TRNE J,IO%CLS
MOVEI <"C>
IDPB X
MOVEI <" >
TRNE J,IO%EOF
MOVEI <"E>
IDPB X
MOVEI <" >
TRNE J,IO%DTM
MOVEI <"M>
IDPB X
MOVEI <" >
TLNE J,IO%CON
MOVEI <"O>
IDPB X
MOVEI <" >
TLNE J,IO%CCR
MOVEI <"D>
IDPB X
MOVEI <" >
TLNE J,IO%RDY
MOVEI <"R>
IDPB X
; (continued on next page)
;NOIWIN NOOWIN
; (continued from previous page)
MOVE Y,DIWS(DDB) ; input window
MOVEI N,2
PUSHJ P,DECOUT
MOVE Y,DOWS(DDB) ; output window
MOVEI N,2
PUSHJ P,DECOUT
SKIPGE Y,DIWIN(DDB) ; input free
JRST [ JSP Y,TXTSTR
ASCIZ/ */
JRST NOIWIN]
MOVEI N,2
PUSHJ P,DECOUT
NOIWIN: SKIPGE Y,DOWIN(DDB) ; output free
JRST [ JSP Y,TXTSTR
ASCIZ/ */
JRST NOOWIN]
MOVEI N,2
PUSHJ P,DECOUT
NOOWIN: MOVE Y,DACK(DDB) ; last received
MOVEI N,3
PUSHJ P,OCTOUT
MOVE Y,DSEQ(DDB) ; last sent
MOVEI N,3
PUSHJ P,OCTOUT
MOVEI <" >
IDPB X
MOVEI Y,DNUM(DDB) ; phone number
TLOA Y,440700
IDPB X
ILDB Y
JUMPN .-2
PUSHJ P,TERPRI
CAME I,DLNNUM
AOJA I,NXTDDB
; (continued on next page)
;CLREOF
; (continued from previous page)
; Statistics
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/Performance statistics:/
PUSHJ P,TERPRI
PUSHJ P,TERPRI
PERF NINPKT, total input packets
PERF NOUPKT,total output packets
PERF NORPKT, re-xmitted packets
PERF NFRERR, framing errors
PERF NCKERR, checksum errors
PERF NRCERR, ERR's received
PERF NSNERR, ERR's sent
PERF NRNERR, NAK's received
PERF NDOERR, user data overruns
PERF NNSERR, no FS at MAKPDB
PERF NRSERR, no FS at REPFPL
PERF NDLERR, dialer bit the bag
PERF NSQERR, sequence errors
PERF NRPERR, redundant packets
PERF NCRTRN, clock-level packets
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/Interpretation of status bits:/
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/ C Connection closing/
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/ E EOF signal raised/
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/ M Data missed due to receiver being too slow/
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/ O Connection open/
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/ D Carrier up/
PUSHJ P,TERPRI
JSP Y,TXTSTR
ASCIZ/ R Connection ready (saw at least one valid Dialnet packet)/
PUSHJ P,TERPRI
; Clear to end of screen
MOVE Z,HSIZE
TLNE L,(DDDLIN\DMLIN)
CLREOF: CAMG Z,LINCNT
JRST NODDDM ; III or printing
MOVEI <" >
IDPB X
PUSHJ P,TERPRI
SOJA Z,CLREOF
; (continued on next page)
;NODDDM DOIII DODM DELAY NODLAY DELAY1
NODDDM: TLNN X,700000 ; if at word boundry
ADDI X,1
SETZM 1(X) ; HALT to stop program
MOVEI X,(X)
MOVEI 2(X)
SUBI @DPHEAD
MOVEM DPHEAD+1 ; save display program length
AOS (X)
CAME X,SCREEN
SOJA X,.-2
; Now output the accumulated text
TLNN L,(DDDLIN\IIILIN\DMLIN)
JRST [ OUTSTR @SCREEN
OUTSTR [ASCIZ/
/]
JRST DELAY]
JUMPL L,DOIII
TLNE L,(DMLIN)
JRST [ SETZM @DPHEAD
MOVE X,[.BYTE 7 ? 177 ? ↑L ? 140 ? 142]; cursor at third line
JRST DODM]
MOVE TXTOUT
MOVEM @DPHEAD
SKIPA X,COLPOS
DOIII: MOVE X,[.BYTE 11.,11.,3,3,2,2,4 ? -777 ? 640 ? 2 ? 2 ? 1 ? 2 ? 6]
DODM: MOVEM X,@DPHEAD+3
UPGIOT 1,DPHEAD ; display the text
; Done, wait a while and go again
DELAY: SKIPE DELAYP
JRST NODLAY
MOVEI 20.
TLNE L,(DDDLIN\IIILIN)
MOVEI 1
TLNE L,(DMLIN)
MOVEI 5.
SLEEP
NODLAY: SNEAKS
JRST GETSTA
ANDI 177
CAIN 175
JRST [INCHRW ? SETCMM DELAYP ? JRST GETSTA] ; ALT toggles the delay flag
CAIN <" >
JRST [INCHRW ? INCHRW ? JRST GETSTA] ; space holds us
CAIE ↑M
JRST DELAY1
INCHRW ; only eat CRLF's
INCHRW
DELAY1: HRROI [004000,,400\"N]
TTYSET
EXIT
;TERPRI DECOUT OCTOUT NUMOUT NUMOU1 NUMOU2 NUMOU3 JOBOUT SIXOUT TXTSTR ...LIT
TERPRI: JSP Y,TXTSTR
ASCIZ/
/
AOS LINCNT
TLNN (DMLIN)
POPJ P,
MOVEI 177
IDPB X
MOVEI ↑W
IDPB X
POPJ P,
; Octal/decimal output of Y. If N > 0, pad with spaces so it fits in N digits
DECOUT: SKIPA Z,[10.]
OCTOUT: MOVEI Z,8.
HRRM Z,NUMOUT ; I don't want to fry another AC
NUMOUT: IDIVI Y,
ADDI Z,"0
PUSH P,Z
SOSG N
JRST NUMOU1
JUMPN Y,NUMOU2
MOVEI Z,<" >
IDPB Z,X
SOJG N,.-1
JRST NUMOU3
NUMOU1: SKIPE Y
NUMOU2: PUSHJ P,NUMOUT
NUMOU3: POP P,Y
IDPB Y,X
POPJ P,
; Job number/PPN/name output
JOBOUT: MOVEI N,2
MOVEI Y,(J)
PUSHJ P,DECOUT
MOVEI <" >
IDPB X
MOVE Y,@PRJPRG
PUSHJ P,SIXOUT
MOVEI <" >
IDPB X
MOVE Y,@JOBNAM
; JRST SIXOUT
; Sixbit output routine
SIXOUT: MOVEI N,6
SETZ Z,
ROTC Y,6
ADDI Z,"A-'A
IDPB Z,X
SOJG N,SIXOUT+1
POPJ P,
; Output text string, called with JSP
TXTSTR: HRLI Y,440700
ILDB Y
JUMPE 1(Y)
IDPB X
JRST TXTSTR+1
...LIT: CONSTA
END GO